Viteನ ಪ್ಲಗಿನ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ವೇಷಿಸಿ ಮತ್ತು ನಿಮ್ಮ ಡೆವಲಪ್ಮೆಂಟ್ ವರ್ಕ್ಫ್ಲೋ ಸುಧಾರಿಸಲು ಕಸ್ಟಮ್ ಪ್ಲಗಿನ್ಗಳನ್ನು ರಚಿಸಲು ಕಲಿಯಿರಿ. ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳೊಂದಿಗೆ ಅಗತ್ಯ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಮಾಸ್ಟರಿ ಮಾಡಿ.
Vite ಪ್ಲಗಿನ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ನು ಸರಳೀಕರಿಸುವುದು: ಕಸ್ಟಮ್ ಪ್ಲಗಿನ್ ರಚನೆಗೆ ಒಂದು ಜಾಗತಿಕ ಮಾರ್ಗದರ್ಶಿ
Vite, ಮಿಂಚಿನ ವೇಗದ ಬಿಲ್ಡ್ ಟೂಲ್, ಫ್ರಂಟ್ಎಂಡ್ ಡೆವಲಪ್ಮೆಂಟ್ನಲ್ಲಿ ಕ್ರಾಂತಿಯನ್ನುಂಟುಮಾಡಿದೆ. ಅದರ ವೇಗ ಮತ್ತು ಸರಳತೆಯು ಹೆಚ್ಚಾಗಿ ಅದರ ಶಕ್ತಿಯುತ ಪ್ಲಗಿನ್ ಆರ್ಕಿಟೆಕ್ಚರ್ನಿಂದಾಗಿದೆ. ಈ ಆರ್ಕಿಟೆಕ್ಚರ್ ಡೆವಲಪರ್ಗಳಿಗೆ Viteನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ವಿಸ್ತರಿಸಲು ಮತ್ತು ಅದನ್ನು ತಮ್ಮ ನಿರ್ದಿಷ್ಟ ಪ್ರಾಜೆಕ್ಟ್ ಅಗತ್ಯಗಳಿಗೆ ತಕ್ಕಂತೆ ಹೊಂದಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಈ ಮಾರ್ಗದರ್ಶಿ Viteನ ಪ್ಲಗಿನ್ ಸಿಸ್ಟಮ್ನ ಸಮಗ್ರ ಪರಿಶೋಧನೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ, ನಿಮ್ಮ ಸ್ವಂತ ಕಸ್ಟಮ್ ಪ್ಲಗಿನ್ಗಳನ್ನು ರಚಿಸಲು ಮತ್ತು ನಿಮ್ಮ ಡೆವಲಪ್ಮೆಂಟ್ ವರ್ಕ್ಫ್ಲೋ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ನಿಮಗೆ ಅಧಿಕಾರ ನೀಡುತ್ತದೆ.
Viteನ ಮೂಲಭೂತ ತತ್ವಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ಪ್ಲಗಿನ್ ರಚನೆಯಲ್ಲಿ ತೊಡಗುವ ಮೊದಲು, Viteನ ಮೂಲಭೂತ ತತ್ವಗಳನ್ನು ಗ್ರಹಿಸುವುದು ಅತ್ಯಗತ್ಯ:
- ಬೇಡಿಕೆಯ ಮೇರೆಗೆ ಕಂಪೈಲೇಶನ್: ಬ್ರೌಸರ್ನಿಂದ ವಿನಂತಿಸಿದಾಗ ಮಾತ್ರ Vite ಕೋಡ್ ಅನ್ನು ಕಂಪೈಲ್ ಮಾಡುತ್ತದೆ, ಇದು ಸ್ಟಾರ್ಟ್ಅಪ್ ಸಮಯವನ್ನು ಗಣನೀಯವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
- ನೇಟಿವ್ ESM: Vite ಡೆವಲಪ್ಮೆಂಟ್ಗಾಗಿ ನೇಟಿವ್ ECMAScript ಮಾಡ್ಯೂಲ್ಗಳನ್ನು (ESM) ಬಳಸುತ್ತದೆ, ಇದು ಡೆವಲಪ್ಮೆಂಟ್ ಸಮಯದಲ್ಲಿ ಬಂಡ್ಲಿಂಗ್ನ ಅಗತ್ಯವನ್ನು ನಿವಾರಿಸುತ್ತದೆ.
- ರೋಲಪ್-ಆಧಾರಿತ ಪ್ರೊಡಕ್ಷನ್ ಬಿಲ್ಡ್: ಪ್ರೊಡಕ್ಷನ್ ಬಿಲ್ಡ್ಗಳಿಗಾಗಿ, Vite ಹೆಚ್ಚು ಆಪ್ಟಿಮೈಸ್ ಮಾಡಲಾದ ಬಂಡ್ಲರ್ ಆದ Rollup ಅನ್ನು ಬಳಸಿ, ದಕ್ಷ ಮತ್ತು ಪ್ರೊಡಕ್ಷನ್ಗೆ-ಸಿದ್ಧವಾದ ಕೋಡ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.
Viteನ ಇಕೋಸಿಸ್ಟಮ್ನಲ್ಲಿ ಪ್ಲಗಿನ್ಗಳ ಪಾತ್ರ
Viteನ ಪ್ಲಗಿನ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ನು ಹೆಚ್ಚು ವಿಸ್ತರಿಸಬಲ್ಲ ರೀತಿಯಲ್ಲಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಪ್ಲಗಿನ್ಗಳು ಹೀಗೆ ಮಾಡಬಹುದು:
- ಕೋಡ್ ಅನ್ನು ಪರಿವರ್ತಿಸುವುದು (ಉದಾ., ಟೈಪ್ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಟ್ರಾನ್ಸ್ಪೈಲ್ ಮಾಡುವುದು, ಪ್ರಿಪ್ರೊಸೆಸರ್ಗಳನ್ನು ಸೇರಿಸುವುದು).
- ಕಸ್ಟಮ್ ಫೈಲ್ಗಳನ್ನು ಸರ್ವ್ ಮಾಡುವುದು (ಉದಾ., ಸ್ಟ್ಯಾಟಿಕ್ ಅಸೆಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು, ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ರಚಿಸುವುದು).
- ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಮಾರ್ಪಡಿಸುವುದು (ಉದಾ., ಚಿತ್ರಗಳನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು, ಸರ್ವಿಸ್ ವರ್ಕರ್ಗಳನ್ನು ರಚಿಸುವುದು).
- Viteನ CLI ಅನ್ನು ವಿಸ್ತರಿಸುವುದು (ಉದಾ., ಕಸ್ಟಮ್ ಕಮಾಂಡ್ಗಳನ್ನು ಸೇರಿಸುವುದು).
ಸರಳ ಮಾರ್ಪಾಡುಗಳಿಂದ ಹಿಡಿದು ಸಂಕೀರ್ಣ ಏಕೀಕರಣಗಳವರೆಗೆ, ವಿವಿಧ ಪ್ರಾಜೆಕ್ಟ್ ಅವಶ್ಯಕತೆಗಳಿಗೆ Vite ಅನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲು ಪ್ಲಗಿನ್ಗಳು ಪ್ರಮುಖವಾಗಿವೆ.
Vite ಪ್ಲಗಿನ್ ಆರ್ಕಿಟೆಕ್ಚರ್: ಒಂದು ಆಳವಾದ ನೋಟ
Vite ಪ್ಲಗಿನ್ ಮೂಲತಃ ಒಂದು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಆಬ್ಜೆಕ್ಟ್ ಆಗಿದ್ದು, ಅದು ಅದರ ನಡವಳಿಕೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ನಿರ್ದಿಷ್ಟ ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಪ್ರಮುಖ ಅಂಶಗಳನ್ನು ಪರಿಶೀಲಿಸೋಣ:
ಪ್ಲಗಿನ್ ಕಾನ್ಫಿಗರೇಶನ್
`vite.config.js` (ಅಥವಾ `vite.config.ts`) ಫೈಲ್ನಲ್ಲಿ ನಿಮ್ಮ Vite ಪ್ರಾಜೆಕ್ಟ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೀರಿ, ಇದರಲ್ಲಿ ಯಾವ ಪ್ಲಗಿನ್ಗಳನ್ನು ಬಳಸಬೇಕು ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವುದು ಸೇರಿದೆ. `plugins` ಆಯ್ಕೆಯು ಪ್ಲಗಿನ್ ಆಬ್ಜೆಕ್ಟ್ಗಳ ಅರೇ ಅಥವಾ ಪ್ಲಗಿನ್ ಆಬ್ಜೆಕ್ಟ್ಗಳನ್ನು ಹಿಂತಿರುಗಿಸುವ ಫಂಕ್ಷನ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ.
// vite.config.js
import myPlugin from './my-plugin';
export default {
plugins: [
myPlugin(), // Invoke the plugin function to create a plugin instance
],
};
ಪ್ಲಗಿನ್ ಆಬ್ಜೆಕ್ಟ್ ಪ್ರಾಪರ್ಟಿಗಳು
Vite ಪ್ಲಗಿನ್ ಆಬ್ಜೆಕ್ಟ್ ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯ ವಿವಿಧ ಹಂತಗಳಲ್ಲಿ ಅದರ ನಡವಳಿಕೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ಹಲವಾರು ಪ್ರಾಪರ್ಟಿಗಳನ್ನು ಹೊಂದಿರಬಹುದು. ಅತ್ಯಂತ ಸಾಮಾನ್ಯ ಪ್ರಾಪರ್ಟಿಗಳ ವಿಭಜನೆ ಇಲ್ಲಿದೆ:
- name: ಪ್ಲಗಿನ್ಗಾಗಿ ಒಂದು ಅನನ್ಯ ಹೆಸರು. ಇದು ಕಡ್ಡಾಯವಾಗಿದೆ ಮತ್ತು ಡೀಬಗ್ ಮಾಡಲು ಮತ್ತು ಸಂಘರ್ಷಗಳನ್ನು ಪರಿಹರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆ: `'my-custom-plugin'`
- enforce: ಪ್ಲಗಿನ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕ್ರಮವನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಸಂಭಾವ್ಯ ಮೌಲ್ಯಗಳು `'pre'` (ಕೋರ್ ಪ್ಲಗಿನ್ಗಳ ಮೊದಲು ರನ್ ಆಗುತ್ತದೆ), `'normal'` (ಡೀಫಾಲ್ಟ್), ಮತ್ತು `'post'` (ಕೋರ್ ಪ್ಲಗಿನ್ಗಳ ನಂತರ ರನ್ ಆಗುತ್ತದೆ). ಉದಾಹರಣೆ: `'pre'`
- config: Viteನ ಕಾನ್ಫಿಗರೇಶನ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಇದು ಬಳಕೆದಾರರ ಕಾನ್ಫಿಗ್ ಮತ್ತು ಎನ್ವಿರಾನ್ಮೆಂಟ್ (ಮೋಡ್ ಮತ್ತು ಕಮಾಂಡ್) ಅನ್ನು ಪಡೆಯುತ್ತದೆ. ಉದಾಹರಣೆ: `config: (config, { mode, command }) => { ... }`
- configResolved: Vite ಕಾನ್ಫಿಗ್ ಸಂಪೂರ್ಣವಾಗಿ ಪರಿಹರಿಸಿದ ನಂತರ ಕರೆಯಲಾಗುತ್ತದೆ. ಅಂತಿಮ ಕಾನ್ಫಿಗ್ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆ: `configResolved(config) { ... }`
- configureServer: ಡೆವಲಪ್ಮೆಂಟ್ ಸರ್ವರ್ ಇನ್ಸ್ಟೆನ್ಸ್ಗೆ (Connect/Express-ರೀತಿಯ) ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಕಸ್ಟಮ್ ಮಿಡಲ್ವೇರ್ ಸೇರಿಸಲು ಅಥವಾ ಸರ್ವರ್ ನಡವಳಿಕೆಯನ್ನು ಮಾರ್ಪಡಿಸಲು ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆ: `configureServer(server) { ... }`
- transformIndexHtml: `index.html` ಫೈಲ್ ಅನ್ನು ಪರಿವರ್ತಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಸ್ಕ್ರಿಪ್ಟ್ಗಳು, ಸ್ಟೈಲ್ಗಳು, ಅಥವಾ ಮೆಟಾ ಟ್ಯಾಗ್ಗಳನ್ನು ಸೇರಿಸಲು ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆ: `transformIndexHtml(html) { ... }`
- resolveId: ಮಾಡ್ಯೂಲ್ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ತಡೆಹಿಡಿಯಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಕಸ್ಟಮ್ ಮಾಡ್ಯೂಲ್ ರೆಸಲ್ಯೂಶನ್ ಲಾಜಿಕ್ಗೆ ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆ: `resolveId(source, importer) { ... }`
- load: ಕಸ್ಟಮ್ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಅಥವಾ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಮಾಡ್ಯೂಲ್ ವಿಷಯವನ್ನು ಮಾರ್ಪಡಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ಗಳು ಅಥವಾ ಕಸ್ಟಮ್ ಲೋಡರ್ಗಳಿಗೆ ಉಪಯುಕ್ತವಾಗಿದೆ. ಉದಾಹರಣೆ: `load(id) { ... }`
- transform: ಮಾಡ್ಯೂಲ್ಗಳ ಸೋರ್ಸ್ ಕೋಡ್ ಅನ್ನು ಪರಿವರ್ತಿಸುತ್ತದೆ. Babel ಪ್ಲಗಿನ್ ಅಥವಾ PostCSS ಪ್ಲಗಿನ್ಗೆ ಹೋಲುತ್ತದೆ. ಉದಾಹರಣೆ: `transform(code, id) { ... }`
- buildStart: ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯ ಆರಂಭದಲ್ಲಿ ಕರೆಯಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆ: `buildStart() { ... }`
- buildEnd: ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆ ಪೂರ್ಣಗೊಂಡ ನಂತರ ಕರೆಯಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆ: `buildEnd() { ... }`
- closeBundle: ಬಂಡಲ್ ಅನ್ನು ಡಿಸ್ಕ್ಗೆ ಬರೆದ ನಂತರ ಕರೆಯಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆ: `closeBundle() { ... }`
- writeBundle: ಬಂಡಲ್ ಅನ್ನು ಡಿಸ್ಕ್ಗೆ ಬರೆಯುವ ಮೊದಲು ಕರೆಯಲಾಗುತ್ತದೆ, ಮಾರ್ಪಾಡಿಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆ: `writeBundle(options, bundle) { ... }`
- renderError: ಡೆವಲಪ್ಮೆಂಟ್ ಸಮಯದಲ್ಲಿ ಕಸ್ಟಮ್ ದೋಷ ಪುಟಗಳನ್ನು ರೆಂಡರ್ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ. ಉದಾಹರಣೆ: `renderError(error, req, res) { ... }`
- handleHotUpdate: HMR ಮೇಲೆ ಸೂಕ್ಷ್ಮ ನಿಯಂತ್ರಣವನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಉದಾಹರಣೆ: `handleHotUpdate({ file, server }) { ... }`
ಪ್ಲಗಿನ್ ಹುಕ್ಸ್ ಮತ್ತು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕ್ರಮ
Vite ಪ್ಲಗಿನ್ಗಳು ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯ ವಿವಿಧ ಹಂತಗಳಲ್ಲಿ ಪ್ರಚೋದಿಸಲ್ಪಡುವ ಹುಕ್ಗಳ ಸರಣಿಯ ಮೂಲಕ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಪರಿಣಾಮಕಾರಿ ಪ್ಲಗಿನ್ಗಳನ್ನು ಬರೆಯಲು ಈ ಹುಕ್ಗಳು ಯಾವ ಕ್ರಮದಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳ್ಳುತ್ತವೆ ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಬಹಳ ಮುಖ್ಯ.
- config: Vite ಕಾನ್ಫಿಗ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಿ.
- configResolved: ಪರಿಹರಿಸಿದ ಕಾನ್ಫಿಗ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ.
- configureServer: ಡೆವ್ ಸರ್ವರ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಿ (ಡೆವಲಪ್ಮೆಂಟ್ ಮಾತ್ರ).
- transformIndexHtml: `index.html` ಫೈಲ್ ಅನ್ನು ಪರಿವರ್ತಿಸಿ.
- buildStart: ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯ ಆರಂಭ.
- resolveId: ಮಾಡ್ಯೂಲ್ ಐಡಿಗಳನ್ನು ಪರಿಹರಿಸಿ.
- load: ಮಾಡ್ಯೂಲ್ ವಿಷಯವನ್ನು ಲೋಡ್ ಮಾಡಿ.
- transform: ಮಾಡ್ಯೂಲ್ ಕೋಡ್ ಅನ್ನು ಪರಿವರ್ತಿಸಿ.
- handleHotUpdate: ಹಾಟ್ ಮಾಡ್ಯೂಲ್ ರಿಪ್ಲೇಸ್ಮೆಂಟ್ (HMR) ಅನ್ನು ನಿರ್ವಹಿಸಿ.
- writeBundle: ಡಿಸ್ಕ್ಗೆ ಬರೆಯುವ ಮೊದಲು ಔಟ್ಪುಟ್ ಬಂಡಲ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಿ.
- closeBundle: ಔಟ್ಪುಟ್ ಬಂಡಲ್ ಡಿಸ್ಕ್ಗೆ ಬರೆಯಲ್ಪಟ್ಟ ನಂತರ ಕರೆಯಲಾಗುತ್ತದೆ.
- buildEnd: ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯ ಅಂತ್ಯ.
ನಿಮ್ಮ ಮೊದಲ ಕಸ್ಟಮ್ Vite ಪ್ಲಗಿನ್ ರಚಿಸುವುದು
ಪ್ರೊಡಕ್ಷನ್ ಬಿಲ್ಡ್ನಲ್ಲಿ ಪ್ರತಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಬ್ಯಾನರ್ ಸೇರಿಸುವ ಒಂದು ಸರಳ Vite ಪ್ಲಗಿನ್ ಅನ್ನು ರಚಿಸೋಣ. ಈ ಬ್ಯಾನರ್ ಪ್ರಾಜೆಕ್ಟ್ ಹೆಸರು ಮತ್ತು ಆವೃತ್ತಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
ಪ್ಲಗಿನ್ ಇಂಪ್ಲಿಮೆಂಟೇಶನ್
// banner-plugin.js
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
export default function bannerPlugin() {
return {
name: 'banner-plugin',
apply: 'build',
transform(code, id) {
if (!id.endsWith('.js')) {
return code;
}
const packageJsonPath = resolve(process.cwd(), 'package.json');
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
const banner = `/**\n * Project: ${packageJson.name}\n * Version: ${packageJson.version}\n */\n`;
return banner + code;
},
};
}
ವಿವರಣೆ:
- name: ಪ್ಲಗಿನ್ನ ಹೆಸರನ್ನು 'banner-plugin' ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
- apply: ಈ ಪ್ಲಗಿನ್ ಬಿಲ್ಡ್ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಮಾತ್ರ ರನ್ ಆಗಬೇಕು ಎಂದು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಇದನ್ನು 'build' ಗೆ ಹೊಂದಿಸುವುದರಿಂದ ಇದು ಪ್ರೊಡಕ್ಷನ್-ಮಾತ್ರ ಆಗುತ್ತದೆ, ಡೆವಲಪ್ಮೆಂಟ್ ಸಮಯದಲ್ಲಿ ಅನಗತ್ಯ ಓವರ್ಹೆಡ್ ಅನ್ನು ತಪ್ಪಿಸುತ್ತದೆ.
- transform(code, id):
- ಇದು ಪ್ಲಗಿನ್ನ ತಿರುಳು. ಇದು ಪ್ರತಿ ಮಾಡ್ಯೂಲ್ನ ಕೋಡ್ (`code`) ಮತ್ತು ಐಡಿ (`id`) ಯನ್ನು ತಡೆಯುತ್ತದೆ.
- ಷರತ್ತುಬದ್ಧ ಪರಿಶೀಲನೆ: `if (!id.endsWith('.js'))` ಈ ಪರಿವರ್ತನೆಯು ಕೇವಲ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ಗಳಿಗೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಇದು ಇತರ ಫೈಲ್ ಪ್ರಕಾರಗಳನ್ನು (CSS ಅಥವಾ HTML ನಂತಹ) ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ, ಇದು ದೋಷಗಳು ಅಥವಾ ಅನಿರೀಕ್ಷಿತ ನಡವಳಿಕೆಗೆ ಕಾರಣವಾಗಬಹುದು.
- Package.json ಪ್ರವೇಶ:
- `resolve(process.cwd(), 'package.json')` `package.json` ಫೈಲ್ಗೆ ಸಂಪೂರ್ಣ ಪಥವನ್ನು ನಿರ್ಮಿಸುತ್ತದೆ. `process.cwd()` ಪ್ರಸ್ತುತ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವ ಡೈರೆಕ್ಟರಿಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ, ಕಮಾಂಡ್ ಅನ್ನು ಎಲ್ಲಿಂದ ಕಾರ್ಯಗತಗೊಳಿಸಿದರೂ ಸರಿಯಾದ ಪಥವನ್ನು ಬಳಸುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
- `JSON.parse(readFileSync(packageJsonPath, 'utf-8'))` `package.json` ಫೈಲ್ ಅನ್ನು ಓದಿ ಮತ್ತು ಪಾರ್ಸ್ ಮಾಡುತ್ತದೆ. `readFileSync` ಫೈಲ್ ಅನ್ನು ಸಿಂಕ್ರೊನಸ್ ಆಗಿ ಓದುತ್ತದೆ, ಮತ್ತು `'utf-8'` ಯೂನಿಕೋಡ್ ಅಕ್ಷರಗಳನ್ನು ಸರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ಎನ್ಕೋಡಿಂಗ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಸಿಂಕ್ರೊನಸ್ ಓದುವಿಕೆ ಇಲ್ಲಿ ಸ್ವೀಕಾರಾರ್ಹವಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಟ್ರಾನ್ಸ್ಫಾರ್ಮ್ನ ಆರಂಭದಲ್ಲಿ ಒಮ್ಮೆ ಸಂಭವಿಸುತ್ತದೆ.
- ಬ್ಯಾನರ್ ಉತ್ಪಾದನೆ:
- ``const banner = `/**\n * Project: ${packageJson.name}\n * Version: ${packageJson.version}\n */\n`;`` ಬ್ಯಾನರ್ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ. ಇದು ಟೆಂಪ್ಲೇಟ್ ಲಿಟರಲ್ಗಳನ್ನು (ಬ್ಯಾಕ್ಟಿಕ್ಸ್) ಬಳಸಿ `package.json` ಫೈಲ್ನಿಂದ ಪ್ರಾಜೆಕ್ಟ್ ಹೆಸರು ಮತ್ತು ಆವೃತ್ತಿಯನ್ನು ಸುಲಭವಾಗಿ ಎಂಬೆಡ್ ಮಾಡುತ್ತದೆ. `\n` ಅನುಕ್ರಮಗಳು ಬ್ಯಾನರ್ ಅನ್ನು ಸರಿಯಾಗಿ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡಲು ಹೊಸ ಸಾಲುಗಳನ್ನು ಸೇರಿಸುತ್ತವೆ. `*` ಅನ್ನು `\*` ನಿಂದ ಎಸ್ಕೇಪ್ ಮಾಡಲಾಗಿದೆ.
- ಕೋಡ್ ಪರಿವರ್ತನೆ: `return banner + code;` ಮೂಲ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಕೋಡ್ಗೆ ಬ್ಯಾನರ್ ಅನ್ನು ಸೇರಿಸುತ್ತದೆ. ಇದು ಟ್ರಾನ್ಸ್ಫಾರ್ಮ್ ಫಂಕ್ಷನ್ನಿಂದ ಹಿಂತಿರುಗಿದ ಅಂತಿಮ ಫಲಿತಾಂಶವಾಗಿದೆ.
ಪ್ಲಗಿನ್ ಅನ್ನು ಸಂಯೋಜಿಸುವುದು
ನಿಮ್ಮ `vite.config.js` ಫೈಲ್ಗೆ ಪ್ಲಗಿನ್ ಅನ್ನು ಇಂಪೋರ್ಟ್ ಮಾಡಿ ಮತ್ತು ಅದನ್ನು `plugins` ಅರೇಗೆ ಸೇರಿಸಿ:
// vite.config.js
import bannerPlugin from './banner-plugin';
export default {
plugins: [
bannerPlugin(),
],
};
ಬಿಲ್ಡ್ ಅನ್ನು ರನ್ ಮಾಡುವುದು
ಈಗ, `npm run build` (ಅಥವಾ ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ನ ಬಿಲ್ಡ್ ಕಮಾಂಡ್) ಅನ್ನು ರನ್ ಮಾಡಿ. ಬಿಲ್ಡ್ ಪೂರ್ಣಗೊಂಡ ನಂತರ, `dist` ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ರಚಿಸಲಾದ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ. ಪ್ರತಿ ಫೈಲ್ನ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಬ್ಯಾನರ್ ಅನ್ನು ನೀವು ನೋಡುತ್ತೀರಿ.
ಸುಧಾರಿತ ಪ್ಲಗಿನ್ ತಂತ್ರಗಳು
ಸರಳ ಕೋಡ್ ಪರಿವರ್ತನೆಗಳ ಹೊರತಾಗಿ, Vite ಪ್ಲಗಿನ್ಗಳು ತಮ್ಮ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೆಚ್ಚಿಸಲು ಹೆಚ್ಚು ಸುಧಾರಿತ ತಂತ್ರಗಳನ್ನು ಬಳಸಿಕೊಳ್ಳಬಹುದು.
ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ಗಳು
ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ಗಳು ಪ್ಲಗಿನ್ಗಳಿಗೆ ಡಿಸ್ಕ್ನಲ್ಲಿ ನಿಜವಾದ ಫೈಲ್ಗಳಾಗಿ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ರಚಿಸಲು ಅನುಮತಿಸುತ್ತವೆ. ಡೈನಾಮಿಕ್ ವಿಷಯವನ್ನು ರಚಿಸಲು ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಕಾನ್ಫಿಗರೇಶನ್ ಡೇಟಾವನ್ನು ಒದಗಿಸಲು ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.
// virtual-module-plugin.js
export default function virtualModulePlugin(options) {
const virtualModuleId = 'virtual:my-module';
const resolvedVirtualModuleId = '\0' + virtualModuleId; // Prefix with \0 to prevent Rollup from processing
return {
name: 'virtual-module-plugin',
resolveId(id) {
if (id === virtualModuleId) {
return resolvedVirtualModuleId;
}
},
load(id) {
if (id === resolvedVirtualModuleId) {
return `export default ${JSON.stringify(options)};`;
}
},
};
}
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ:
- `virtualModuleId` ಎಂಬುದು ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ನ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಆಗಿದೆ.
- `resolvedVirtualModuleId` ಅನ್ನು `\0` ನೊಂದಿಗೆ ಪೂರ್ವಪ್ರತ್ಯಯ ಮಾಡಲಾಗಿದೆ, ಇದರಿಂದ Rollup ಅದನ್ನು ನಿಜವಾದ ಫೈಲ್ ಎಂದು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ಇದು Rollup ಪ್ಲಗಿನ್ಗಳಲ್ಲಿ ಬಳಸಲಾಗುವ ಒಂದು ಸಂಪ್ರದಾಯವಾಗಿದೆ.
- `resolveId` ಮಾಡ್ಯೂಲ್ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ತಡೆಹಿಡಿಯುತ್ತದೆ ಮತ್ತು ವಿನಂತಿಸಿದ ಐಡಿ `virtualModuleId` ಗೆ ಹೊಂದಿಕೆಯಾದರೆ ಪರಿಹರಿಸಿದ ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ ಐಡಿಯನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
- `load` ಮಾಡ್ಯೂಲ್ ಲೋಡಿಂಗ್ ಅನ್ನು ತಡೆಹಿಡಿಯುತ್ತದೆ ಮತ್ತು ವಿನಂತಿಸಿದ ಐಡಿ `resolvedVirtualModuleId` ಗೆ ಹೊಂದಿಕೆಯಾದರೆ ಮಾಡ್ಯೂಲ್ನ ಕೋಡ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಇದು `options` ಅನ್ನು ಡೀಫಾಲ್ಟ್ ಎಕ್ಸ್ಪೋರ್ಟ್ ಆಗಿ ರಫ್ತು ಮಾಡುವ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.
ವರ್ಚುವಲ್ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸುವುದು
// vite.config.js
import virtualModulePlugin from './virtual-module-plugin';
export default {
plugins: [
virtualModulePlugin({ message: 'Hello from virtual module!' }),
],
};
// main.js
import message from 'virtual:my-module';
console.log(message.message); // Output: Hello from virtual module!
ಇಂಡೆಕ್ಸ್ HTML ಅನ್ನು ಪರಿವರ್ತಿಸುವುದು
`transformIndexHtml` ಹುಕ್ `index.html` ಫೈಲ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ಸ್ಕ್ರಿಪ್ಟ್ಗಳು, ಸ್ಟೈಲ್ಗಳು, ಅಥವಾ ಮೆಟಾ ಟ್ಯಾಗ್ಗಳನ್ನು ಸೇರಿಸುವುದು. ಅನಾಲಿಟಿಕ್ಸ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಸೇರಿಸಲು, ಸಾಮಾಜಿಕ ಮಾಧ್ಯಮ ಮೆಟಾಡೇಟಾವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು, ಅಥವಾ HTML ರಚನೆಯನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಇದು ಉಪಯುಕ್ತವಾಗಿದೆ.
// inject-script-plugin.js
export default function injectScriptPlugin() {
return {
name: 'inject-script-plugin',
transformIndexHtml(html) {
return html.replace(
'